Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit b5f9665d99f2bdaf6f02b692be12c25b28b37962


Parents : fabd08f
Author : Ivan <e46112d44649266d71fe2193e00a4710>
Signature : T66BB85Valid, signed by author
Date : 2026-07-28T18:15:58-05:00

feat: normalize announce interval seconds in PageNodeManager and enhance localization strings

Changes
Diff

diff --git a/meshchatx.rsm b/meshchatx.rsm
index 237c3abc..6d722303 100644
Binary files a/meshchatx.rsm and b/meshchatx.rsm differ

diff --git a/meshchatx/src/backend/page_node_manager.py b/meshchatx/src/backend/page_node_manager.py
index b39e4f04..bddd894e 100644
--- a/meshchatx/src/backend/page_node_manager.py
+++ b/meshchatx/src/backend/page_node_manager.py
@@ -10,7 +10,7 @@ storage/page_nodes/<node_id>/.
import os
import uuid
-from meshchatx.src.backend.page_node import PageNode
+from meshchatx.src.backend.page_node import PageNode, normalize_announce_interval_seconds
class PageNodeManager:
@@ -42,7 +42,9 @@ class PageNodeManager:
name=config["name"],
base_dir=node_dir,
announce_enabled=config.get("announce_enabled", True),
- announce_interval_seconds=config.get("announce_interval_seconds"),
+ announce_interval_seconds=normalize_announce_interval_seconds(
+ config.get("announce_interval_seconds"),
+ ),
on_announce=self.on_announce,
)
self.nodes[node_id] = node
@@ -66,7 +68,9 @@ class PageNodeManager:
name=name,
base_dir=node_dir,
announce_enabled=announce_enabled,
- announce_interval_seconds=announce_interval_seconds,
+ announce_interval_seconds=normalize_announce_interval_seconds(
+ announce_interval_seconds,
+ ),
on_announce=self.on_announce,
)
node.save_config()

diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json
index f21d9066..1fb2329a 100644
--- a/meshchatx/src/frontend/locales/de.json
+++ b/meshchatx/src/frontend/locales/de.json
@@ -502,6 +502,7 @@
"network_degraded": "RNS nicht verfügbar. Die App läuft weiter, damit Sie diagnostizieren und wiederherstellen können, ohne Daten zu löschen.",
"recover_network": "RNS erneut versuchen",
"open_settings": "Einstellungen öffnen",
+ "open_backups": "Backups öffnen",
"open_interfaces": "Schnittstellen öffnen",
"network_recovered": "RNS wiederhergestellt",
"network_recover_failed": "RNS konnte nicht wiederhergestellt werden. Prüfen Sie die Fehlerdetails, dann erneut versuchen oder Einstellungen und Schnittstellen prüfen.",
@@ -1183,6 +1184,7 @@
"app_name": "MeshChatX",
"automatic_backups_desc": "Automatische tägliche Sicherungen Ihrer Datenbank.",
"automatic_backups_title": "Automatische Backups",
+ "automatic_backups_empty": "Noch keine automatischen Backups. Nutzen Sie oben Wiederherstellen aus Datei oder erstellen Sie ein manuelles Backup, wenn die Datenbank wieder gesund ist.",
"backup_download_failed": "Backup konnte nicht heruntergeladen werden",
"backup_downloaded": "Backup heruntergeladen",
"backend_stack": "Python-Pakete",
@@ -1236,6 +1238,9 @@
"recovery": "Wiederherstellung",
"recovery_complete": "Datenbankwiederherstellung abgeschlossen.",
"recovery_confirm": "Datenbankwiederherstellung ausführen? Es wird eine vollständige Integritätsprüfung und VACUUM durchgeführt. Das kann dauern und die App kann kurz nicht reagieren. Es wird keine Backup-Datei eingespielt.",
+ "auto_recover_confirm": "Automatische Wiederherstellung versuchen? MeshChatX stellt das neueste Backup wieder her, das zu dieser App-Version passt, oder führt eine SQLite-Reparatur aus, wenn kein Backup passt.",
+ "auto_recover_backup": "Wiederherstellung aus dem neuesten kompatiblen Backup. Die App wird neu gestartet.",
+ "auto_recover_failed": "Automatische Wiederherstellung konnte die Datenbank nicht reparieren. Wählen Sie ein Backup manuell oder stellen Sie aus einer Datei wieder her.",
"recovery_failed": "Wiederherstellung fehlgeschlagen",
"vacuum_complete": "Datenbank-Vakuum abgeschlossen.",
"vacuum_failed": "Datenbank konnte nicht vakuumiert werden.",

diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json
index a71bbb3a..35f3bd48 100644
--- a/meshchatx/src/frontend/locales/es.json
+++ b/meshchatx/src/frontend/locales/es.json
@@ -502,6 +502,7 @@
"network_degraded": "RNS no disponible. La aplicación sigue en ejecución para que pueda diagnosticar y recuperar sin borrar datos.",
"recover_network": "Reintentar RNS",
"open_settings": "Abrir configuración",
+ "open_backups": "Abrir copias de seguridad",
"open_interfaces": "Abrir interfaces",
"network_recovered": "RNS recuperado",
"network_recover_failed": "No se pudo recuperar RNS. Revise el error y reintente, o revise la configuración y las interfaces.",
@@ -1131,6 +1132,7 @@
"app_name": "MeshChatX",
"automatic_backups_desc": "Copias de seguridad diarias automáticas de tu base de datos.",
"automatic_backups_title": "Copias automáticas",
+ "automatic_backups_empty": "Aún no hay copias automáticas. Usa Restaurar desde archivo arriba o crea una copia manual cuando la base de datos esté sana.",
"backup_download_failed": "No se pudo descargar la copia de seguridad",
"backup_downloaded": "Copia de seguridad descargada",
"backend_stack": "Paquetes Python",
@@ -1184,6 +1186,9 @@
"recovery": "Recuperación",
"recovery_complete": "Recuperación de la base de datos finalizada.",
"recovery_confirm": "¿Ejecutar recuperación de la base de datos? Se hará una comprobación de integridad completa y VACUUM. Puede tardar y la aplicación puede quedar sin respuesta un tiempo. No carga un archivo de copia de seguridad.",
+ "auto_recover_confirm": "¿Intentar recuperación automática? MeshChatX restaurará la copia más reciente compatible con esta versión o reparará SQLite si no hay copia adecuada.",
+ "auto_recover_backup": "Restaurado desde la copia compatible más reciente. La aplicación se reiniciará.",
+ "auto_recover_failed": "La recuperación automática no pudo reparar la base de datos. Elige una copia manualmente o restaura desde archivo.",
"recovery_failed": "La recuperación falló",
"vacuum_complete": "VACUUM de la base de datos completado.",
"vacuum_failed": "No se pudo completar el VACUUM de la base de datos.",

diff --git a/meshchatx/src/frontend/locales/fi.json b/meshchatx/src/frontend/locales/fi.json
index 3dee76d9..1e34cf05 100644
--- a/meshchatx/src/frontend/locales/fi.json
+++ b/meshchatx/src/frontend/locales/fi.json
@@ -502,6 +502,7 @@
"network_degraded": "RNS ei ole käytettävissä. Sovellus pysyy käynnissä, jotta voit diagnosoida ja palauttaa ilman tietojen tyhjennystä.",
"recover_network": "Yritä RNS uudelleen",
"open_settings": "Avaa asetukset",
+ "open_backups": "Avaa varmuuskopiot",
"open_interfaces": "Avaa liittymät",
"network_recovered": "RNS palautettu",
"network_recover_failed": "RNS:ää ei voitu palauttaa. Tarkista virhetiedot, yritä uudelleen tai tarkista asetukset ja liittymät.",
@@ -1108,6 +1109,7 @@
"app_name": "MeshChatX",
"automatic_backups_desc": "Automated daily snapshots of your databas Tietokannan automaattiset päivittäiset tilannekuvat.",
"automatic_backups_title": "Automaattiset varmuuskopiot",
+ "automatic_backups_empty": "Ei automaattisia varmuuskopioita. Käytä Palauta tiedostosta yllä tai luo manuaalinen varmuuskopio, kun tietokanta on taas terve.",
"backup_download_failed": "Varmuuskopion lataaminen epäonnistui",
"backup_downloaded": "Varmuuskopio ladattu",
"backend_stack": "Python-paketit",
@@ -1161,6 +1163,9 @@
"recovery": "Palautus",
"recovery_complete": "Tietokannan palautus valmis.",
"recovery_confirm": "Palauta tietokanta? Toiminto suorittaa täyden eheystarkistuksen ja tiivistää tietokannan (VACUUM). Tämä voi viedä aikaa ja sovellus voi hidastua. Toiminto ei tuo varmuuskopiotiedostoa.",
+ "auto_recover_confirm": "Yritä automaattista palautusta? MeshChatX palauttaa uusimman tämän version varmuuskopion tai korjaa SQLite-tietokannan, jos sopiva varmuuskopio puuttuu.",
+ "auto_recover_backup": "Palautettu uusimmasta sopivasta varmuuskopiosta. Sovellus käynnistyy uudelleen.",
+ "auto_recover_failed": "Automaattinen palautus ei korjannut tietokantaa. Valitse varmuuskopio manuaalisesti tai palauta tiedostosta.",
"recovery_failed": "Palautus epäonnistui",
"vacuum_complete": "Tietokannan tiivistys valmis.",
"vacuum_failed": "Tietokannan tiivistys epäonnistui.",

diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json
index b3b9a32c..a2f24b0f 100644
--- a/meshchatx/src/frontend/locales/fr.json
+++ b/meshchatx/src/frontend/locales/fr.json
@@ -502,6 +502,7 @@
"network_degraded": "RNS indisponible. L'application reste ouverte pour diagnostiquer et récupérer sans effacer les données.",
"recover_network": "Réessayer RNS",
"open_settings": "Ouvrir les paramètres",
+ "open_backups": "Ouvrir les sauvegardes",
"open_interfaces": "Ouvrir les interfaces",
"network_recovered": "RNS rétabli",
"network_recover_failed": "Impossible de rétablir RNS. Vérifiez l'erreur, puis réessayez ou consultez les paramètres et les interfaces.",
@@ -1131,6 +1132,7 @@
"app_name": "MeshChatX",
"automatic_backups_desc": "Sauvegardes quotidiennes automatiques de votre base de données.",
"automatic_backups_title": "Sauvegardes automatiques",
+ "automatic_backups_empty": "Aucune sauvegarde automatique pour l’instant. Utilisez Restaurer depuis un fichier ci-dessus ou créez une sauvegarde manuelle lorsque la base est saine.",
"backup_download_failed": "Échec du téléchargement de la sauvegarde",
"backup_downloaded": "Sauvegarde téléchargée",
"backend_stack": "Paquets Python",
@@ -1184,6 +1186,9 @@
"recovery": "Récupération",
"recovery_complete": "Récupération de la base de données terminée.",
"recovery_confirm": "Lancer la récupération de la base de données ? Un contrôle d’intégrité complet et un VACUUM seront exécutés. Cela peut prendre du temps et l’application peut sembler bloquée. Cela ne charge pas un fichier de sauvegarde.",
+ "auto_recover_confirm": "Essayer la récupération automatique ? MeshChatX restaurera la sauvegarde la plus récente compatible avec cette version, ou réparera SQLite si aucune sauvegarde convient.",
+ "auto_recover_backup": "Restauration depuis la sauvegarde compatible la plus récente. L’application va redémarrer.",
+ "auto_recover_failed": "La récupération automatique n’a pas pu réparer la base. Choisissez une sauvegarde manuellement ou restaurez depuis un fichier.",
"recovery_failed": "Échec de la récupération",
"vacuum_complete": "Nettoyage (VACUUM) de la base terminé.",
"vacuum_failed": "Impossible de nettoyer la base de données.",

diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json
index d8f03fc7..249f4f9c 100644
--- a/meshchatx/src/frontend/locales/it.json
+++ b/meshchatx/src/frontend/locales/it.json
@@ -502,6 +502,7 @@
"network_degraded": "RNS non disponibile. L'app resta attiva così puoi diagnosticare e recuperare senza cancellare i dati.",
"recover_network": "Riprova RNS",
"open_settings": "Apri impostazioni",
+ "open_backups": "Apri backup",
"open_interfaces": "Apri interfacce",
"network_recovered": "RNS ripristinato",
"network_recover_failed": "Impossibile ripristinare RNS. Controlla l'errore, poi riprova o rivedi impostazioni e interfacce.",
@@ -1183,6 +1184,7 @@
"app_name": "MeshChatX",
"automatic_backups_desc": "Snapshot giornalieri automatici del database.",
"automatic_backups_title": "Backup automatici",
+ "automatic_backups_empty": "Nessun backup automatico. Usa Ripristina da file sopra o crea un backup manuale quando il database è sano.",
"backup_download_failed": "Download del backup non riuscito",
"backup_downloaded": "Backup scaricato",
"backend_stack": "Pacchetti Python",
@@ -1236,6 +1238,9 @@
"recovery": "Ripristino",
"recovery_complete": "Ripristino del database completato.",
"recovery_confirm": "Eseguire il ripristino del database? Verranno eseguiti un controllo di integrità completo e VACUUM. Può richiedere tempo e l’app potrebbe non rispondere per un po’. Non carica un file di backup.",
+ "auto_recover_confirm": "Provare il ripristino automatico? MeshChatX ripristinerà il backup più recente compatibile con questa versione o riparerà SQLite se non c’è un backup adatto.",
+ "auto_recover_backup": "Ripristinato dal backup compatibile più recente. L’app verrà riavviata.",
+ "auto_recover_failed": "Il ripristino automatico non ha riparato il database. Scegli un backup manualmente o ripristina da file.",
"recovery_failed": "Ripristino non riuscito",
"vacuum_complete": "Vacuum del database completato.",
"vacuum_failed": "Impossibile eseguire il vacuum del database.",

diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json
index 1daaacb1..d50ecd67 100644
--- a/meshchatx/src/frontend/locales/nl.json
+++ b/meshchatx/src/frontend/locales/nl.json
@@ -502,6 +502,7 @@
"network_degraded": "RNS niet beschikbaar. De app blijft draaien zodat je kunt diagnosticeren en herstellen zonder gegevens te wissen.",
"recover_network": "RNS opnieuw proberen",
"open_settings": "Instellingen openen",
+ "open_backups": "Back-ups openen",
"open_interfaces": "Interfaces openen",
"network_recovered": "RNS hersteld",
"network_recover_failed": "RNS kon niet worden hersteld. Controleer de fout, probeer opnieuw of bekijk instellingen en interfaces.",
@@ -1131,6 +1132,7 @@
"app_name": "MeshChatX",
"automatic_backups_desc": "Automatische dagelijkse snapshots van je database.",
"automatic_backups_title": "Automatische back-ups",
+ "automatic_backups_empty": "Nog geen automatische back-ups. Gebruik hierboven Herstellen uit bestand of maak een handmatige back-up wanneer de database gezond is.",
"backup_download_failed": "Back-up downloaden mislukt",
"backup_downloaded": "Back-up gedownload",
"backend_stack": "Python-pakketten",
@@ -1184,6 +1186,9 @@
"recovery": "Herstel",
"recovery_complete": "Databaseherstel voltooid.",
"recovery_confirm": "Databaseherstel uitvoeren? Er wordt een volledige integriteitscontrole en VACUUM uitgevoerd. Dit kan even duren en de app kan tijdelijk niet reageren. Er wordt geen back-upbestand geladen.",
+ "auto_recover_confirm": "Automatisch herstel proberen? MeshChatX herstelt de nieuwste back-up die bij deze appversie past, of repareert SQLite als er geen geschikte back-up is.",
+ "auto_recover_backup": "Hersteld vanaf de nieuwste compatibele back-up. De app wordt opnieuw gestart.",
+ "auto_recover_failed": "Automatisch herstel kon de database niet repareren. Kies handmatig een back-up of herstel uit een bestand.",
"recovery_failed": "Herstel mislukt",
"vacuum_complete": "Database-VACUUM voltooid.",
"vacuum_failed": "VACUUM van de database is mislukt.",

diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json
index 59f4e29f..6e16fdbb 100644
--- a/meshchatx/src/frontend/locales/ru.json
+++ b/meshchatx/src/frontend/locales/ru.json
@@ -502,6 +502,7 @@
"network_degraded": "RNS недоступен. Приложение продолжает работать, чтобы вы могли диагностировать и восстановить работу без удаления данных.",
"recover_network": "Повторить RNS",
"open_settings": "Открыть настройки",
+ "open_backups": "Открыть резервные копии",
"open_interfaces": "Открыть интерфейсы",
"network_recovered": "RNS восстановлен",
"network_recover_failed": "Не удалось восстановить RNS. Проверьте сведения об ошибке, затем повторите попытку или проверьте настройки и интерфейсы.",
@@ -1183,6 +1184,7 @@
"app_name": "MeshChatX",
"automatic_backups_desc": "Автоматические ежедневные снимки вашей базы данных.",
"automatic_backups_title": "Автоматические резервные копии",
+ "automatic_backups_empty": "Автоматических копий ещё нет. Используйте восстановление из файла выше или создайте ручную копию, когда база снова будет в порядке.",
"backup_download_failed": "Не удалось скачать резервную копию",
"backup_downloaded": "Резервная копия скачана",
"backend_stack": "Пакеты Python",
@@ -1236,6 +1238,9 @@
"recovery": "Восстановление",
"recovery_complete": "Восстановление базы данных завершено.",
"recovery_confirm": "Запустить восстановление базы данных? Будет полная проверка целостности и VACUUM. Это может занять время, приложение может не отвечать. Файл резервной копии не подставляется.",
+ "auto_recover_confirm": "Попробовать автоматическое восстановление? MeshChatX восстановит самую новую совместимую с этой версией копию или выполнит ремонт SQLite, если подходящей копии нет.",
+ "auto_recover_backup": "Восстановление из самой новой совместимой копии. Приложение перезапустится.",
+ "auto_recover_failed": "Автоматическое восстановление не исправило базу. Выберите копию вручную или восстановите из файла.",
"recovery_failed": "Восстановление не удалось",
"vacuum_complete": "Очистка базы данных (VACUUM) завершена.",
"vacuum_failed": "Не удалось выполнить VACUUM базы данных.",

diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json
index 27e2bc64..b92a7b5b 100644
--- a/meshchatx/src/frontend/locales/zh.json
+++ b/meshchatx/src/frontend/locales/zh.json
@@ -502,6 +502,7 @@
"network_degraded": "RNS 不可用。应用仍在运行,便于诊断和恢复而无需清除数据。",
"recover_network": "重试 RNS",
"open_settings": "打开设置",
+ "open_backups": "打开备份",
"open_interfaces": "打开接口",
"network_recovered": "RNS 已恢复",
"network_recover_failed": "无法恢复 RNS。请查看错误详情后重试,或检查设置与接口。",
@@ -1131,6 +1132,7 @@
"app_name": "MeshChatX",
"automatic_backups_desc": "数据库的每日自动快照。",
"automatic_backups_title": "自动备份",
+ "automatic_backups_empty": "尚无自动备份。请在上方使用从文件恢复,或在数据库正常后创建手动备份。",
"backup_download_failed": "备份下载失败",
"backup_downloaded": "备份已下载",
"backend_stack": "Python 包",
@@ -1184,6 +1186,9 @@
"recovery": "恢复",
"recovery_complete": "数据库恢复已完成。",
"recovery_confirm": "要运行数据库恢复吗?将执行完整完整性检查与 VACUUM,可能耗时较长且界面可能暂时无响应。不会从备份文件还原。",
+ "auto_recover_confirm": "尝试自动恢复?MeshChatX 将还原与当前版本兼容的最新备份;若无合适备份则尝试 SQLite 修复。",
+ "auto_recover_backup": "已从最新兼容备份还原。应用将重新启动。",
+ "auto_recover_failed": "自动恢复未能修复数据库。请手动选择备份或从文件恢复。",
"recovery_failed": "恢复失败",
"vacuum_complete": "数据库整理(VACUUM)已完成。",
"vacuum_failed": "无法对数据库执行整理。",


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────